Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: MTK Jacobian for CoupledDEs #229

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

oameye
Copy link
Member

@oameye oameye commented Nov 23, 2024

resolves #228

@codecov-commenter
Copy link

codecov-commenter commented Nov 23, 2024

Codecov Report

Attention: Patch coverage is 80.00000% with 1 line in your changes missing coverage. Please review.

Project coverage is 86.43%. Comparing base (6c98239) to head (8fd4b0e).
Report is 34 commits behind head on main.

Files with missing lines Patch % Lines
ext/src/CoupledSDEs.jl 0.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #229      +/-   ##
==========================================
+ Coverage   82.00%   86.43%   +4.42%     
==========================================
  Files          15       17       +2     
  Lines         717      936     +219     
==========================================
+ Hits          588      809     +221     
+ Misses        129      127       -2     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.


🚨 Try these New Features:

@@ -9,4 +9,4 @@ which are the core systems whose dynamic rule `f` is known analytically.
This type is used for deciding whether a creation of a [`TangentDynamicalSystem`](@ref)
is possible or not.
"""
CoreDynamicalSystem{IIP} = Union{CoupledODEs{IIP}, DeterministicIteratedMap{IIP}}
CoreDynamicalSystem{IIP} = Union{CoupledSDEs{IIP}, CoupledODEs{IIP}, DeterministicIteratedMap{IIP}}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this change made? SDEs are not a core system. Tangent space makes no sense for SDEs, and the tangent space is the only reason for the "Core" hierarchy.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just want Jacobian to work for CoupledSDEs, I could also define jacobian(Union{CoupledSDEs, CoreDynamicalSystem})

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is better to define jacobian(sde::CoupledSDEs) = jacobian(CoupledODEs(sde)). Which is also more transparent. It makes it clear that you want the jacobian of the drift, and not of the noise function g which also has a jacobian.

Comment on lines +51 to +52
@test ode.integ.f.jac([1.0, 1.0], [3.0], 0.0) isa Matrix{Float64}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tests must ONLY use the public API. Not access internal fields that may or may not exist. You have to re-write the tests to use the jacobian function exclusively after you create the ode type.

Comment on lines +65 to +66
@test jac isa Matrix{Num}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is this test testing? calculate_jacobian comes from what package?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it comes from MTK

Copy link
Member

@Datseris Datseris Nov 26, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then we shouldn't be testing it. We should only test functionality from our package. This is easier to maintain and also less confusing. So, the jacobian function and the matrix it gives, which is always a matrix of real numbers.

If you think this function from MTK needs additional testing it is much better to contribute these tests directly to MTK (although I doubt it).


jac = jacobian(ode)
@test jac.jac_oop isa RuntimeGeneratedFunction
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Generally speaking testing the type of things is not of much value. We test functionality and interfaces. Instead of testing whether something "is what it should be", test instead that it "does what it should do".

jac = jacobian(ode)
@test jac.jac_oop isa RuntimeGeneratedFunction
@test jac([1.0, 1.0], [3.0], 0.0) isa Matrix{Float64}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ALl of these tests should instead test explicitly the analytic jacobian. That the matrix we get is exactly, numerically, the matrix we expect.

@Datseris
Copy link
Member

sorry for the late reply!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

CoupledSDEs not a CoreDynamicalSystem?
3 participants